package com.xbongbong.saas.model;

import com.xbongbong.paas.domain.entity.PaasFormSubDataEntity;
import com.xbongbong.paas.enums.DelEnum;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;
import com.xbongbong.pro.domain.entity.UpdateDataEntity;
import com.xbongbong.saas.domain.entity.CostAdjustSubDataEntity;
import org.elasticsearch.action.support.WriteRequest;

import java.util.List;
import java.util.Map;

/**
 * @author WuHB
 * @date 2021/11/22 09:09
 */
public interface CostAdjustSubDataModel extends IModel<CostAdjustSubDataEntity> {

    /**
     * 插入
     *
     * @param entity 实体
     * @return 是否成功
     * @throws XbbException 数据库操作异常
     */
    @Override
    Integer insert(CostAdjustSubDataEntity entity) throws XbbException;

    /**
     * 更新
     *
     * @param entity 实体
     * @return 是否成功
     * @throws XbbException 数据库操作异常
     */
    @Override
    Integer update(CostAdjustSubDataEntity entity) throws XbbException;

    /**
     * 获取符合查询条件的记录
     *
     * @param param 查询条件
     * @return 符合查询条件的记录
     */
    @Override
    List<CostAdjustSubDataEntity> findEntitys(Map<String, Object> param);

    /**
     * 获取符合查询条件的记录总数
     *
     * @param param 查询条件
     * @return 符合查询条件的记录总数
     */
    @Override
    Integer getEntitysCount(Map<String, Object> param);

    /**
     * Description: 查询符合条件的数据（无子表单数据）
     *
     * @param param 查询条件
     * @return java.util.List<T>
     */
    @Override
    List<CostAdjustSubDataEntity> findEntitysWithoutSub(Map<String, Object> param);

    /**
     * 批量添加
     *
     * @param entities 调整单子表单实体类集合
     * @return 影响条数
     * @throws XbbException 异常
     */
    Integer insertBatch(List<CostAdjustSubDataEntity> entities) throws XbbException;

    /**
     * 根据dataId查询成本调整单子表单
     *
     * @param dataId 数据ID
     * @param corpid 公司ID
     * @return 成本调整单子表单集合
     */
    List<CostAdjustSubDataEntity> getByDataId(Long dataId, String corpid);

    /**
     * 根据dataId集合查询成本调整单子表单
     *
     * @param dataIds 数据ID集合
     * @param corpid  公司ID
     * @param delEnum 是否删除 @see {@link DelEnum}
     * @return
     */
    List<CostAdjustSubDataEntity> getByDataIds(List<Long> dataIds, String corpid, DelEnum delEnum);

    /**
     * 批量修改成本调整单子表单
     *
     * @param updateDataList 修改数据集合
     * @param corpid         公司ID
     * @return 影响条数
     * @throws XbbException 异常
     */
    Integer updateBatch(List<UpdateDataEntity> updateDataList, String corpid) throws XbbException;

    /**
     * 批量删除成本调整单子表单
     *
     * @param corpid        公司ID
     * @param entities      调整单子表单实体类集合
     * @param refreshPolicy WriteRequest.RefreshPolicy
     * @return 影响条数
     * @throws XbbException 异常
     */
    Integer deleteBatch(String corpid, List<CostAdjustSubDataEntity> entities, WriteRequest.RefreshPolicy refreshPolicy) throws XbbException;

    /**
     * 根据dataId删除成本调整单子表单
     *
     * @param dataId 数据ID
     * @param corpid 公司ID
     * @return 影响条数
     * @throws XbbException 异常
     */
    Integer deleteByDataId(Long dataId, String corpid) throws XbbException;

    /**
     * 根据dataId集合删除成本调整单子表单
     *
     * @param dataIds 数据ID集合
     * @param corpid  公司ID
     * @param delEnum 是否删除 @see {@link DelEnum}
     * @return 影响条数
     * @throws XbbException 异常
     */
    Integer deleteBatchByDataId(List<Long> dataIds, String corpid, DelEnum delEnum) throws XbbException;

    /**
     * 根据dataids批量恢复成本调整单子表单
     *
     * @param dataIds 数据ID集合
     * @param corpid  公司ID
     * @throws XbbException 异常
     */
    void restoreBatch(List<Long> dataIds, String corpid) throws XbbException;

    /**
     * 修改删除
     *
     * @param updateDelList 调整单子表单实体类集合
     * @param corpid        公司ID
     * @param refreshPolicy WriteRequest.RefreshPolicy
     * @param delEnum       是否删除 @see {@link DelEnum}
     * @return 影响条数
     * @throws XbbException 异常
     */
    Integer updateDel(List<? extends PaasFormSubDataEntity> updateDelList, String corpid, WriteRequest.RefreshPolicy refreshPolicy, DelEnum delEnum) throws XbbException;

    /**
     * 根据实体批量修改
     *
     * @param list   调整单子表单实体类集合
     * @param corpid 公司ID
     * @return 影响条数
     * @throws XbbException 异常
     */
    Integer updateBatchByEntity(List<? extends PaasFormSubDataEntity> list, String corpid) throws XbbException;


}
